import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

/**
 * @author TZL
 * @date 2020/7/24
 */
public class DaiMaShengCheng {

    public static void main(String[] args) {
        // 1.全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        // 生成路径 此处应该写具体的磁盘路径
        System.out.println(System.getProperty("user.dir"));//获得当前project的磁盘目录
        globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
        globalConfig.setAuthor("tzl");// 作者
        globalConfig.setFileOverride(true);// 再次生成时是否覆盖
        globalConfig.setIdType(IdType.AUTO);// 设置ID生成策略
        globalConfig.setServiceName("%sService");// Service接口名 %s为占位符，填充的是实体类名
        globalConfig.setServiceImplName("%sServiceImpl");
        globalConfig.setBaseResultMap(true);// 生成的映射文件中包含一个 <resultMap>, 便于后续自定义方法时使用
        globalConfig.setBaseColumnList(true);// 生成一个sql片段，包含所有列，便于后续自定义方法时使用
        globalConfig.setActiveRecord(true);//开启AR模式，实体类会继承Model
        globalConfig.setEnableCache(true);// 开启二级缓存
        globalConfig.setOpen(false);// 是否打开输出目录

        // 2.数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/dbtest?useUnicode=true&useSSL=false&characterEncoding=utf8");
        dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("root");

        // 3.策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setCapitalMode(true)// 全局大写
                // 会检查表名是否以t_开头,如果是，如：t_user得到User；如果不是，如 student得到Student
                .setTablePrefix("t_")
                //.setNaming(NamingStrategy.underline_to_camel) // 表名admin_user 得到实体 AdminUser
                // 列名如果有下划线转驼峰，如：create_time得到 createTime
                .setColumnNaming(NamingStrategy.underline_to_camel)
                //.setInclude("t_user","order"); 包含表 或 排除表 二者选其一。可以使用正则
//                .setExclude("order")// 除order之外的所有表
                .setVersionFieldName("version")// 设置乐观锁版本列名，会在对应属性上加 @Version注解
                .setEntityLombokModel(true) //实体中使用lombok
                .setRestControllerStyle(true); // controller中使用RestController
        // 4. 包名配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.qf")// 设置父包
                .setMapper("mapper")
                .setXml("mapper")
                .setEntity("entity")
                .setService("service")
                .setServiceImpl("service.impl");
        // 5. 生成器，集成上述4项配置
        AutoGenerator generator = new AutoGenerator();
        generator.setGlobalConfig(globalConfig);
        generator.setPackageInfo(pc);
        generator.setDataSource(dataSourceConfig);
        generator.setStrategy(strategyConfig);
        // 执行，开始生成
        generator.execute();
    }

}
